#include "friendapplywidget.h"
#include "ui_friendapplywidget.h"

FriendApplyWidget::FriendApplyWidget(const QString& useroc) :
    ui(new Ui::FriendApplyWidget)
{
    ui->setupUi(this);
    this->useroc=useroc;
    //加载好友申请缓冲区中加载好友申请
    loadFriendApplyToUI();
    qDebug()<<FriendApplyLib::getInstance()->getList();
    //设置关闭时释放，否则无法触发析构函数，发送关闭信号
    this->setAttribute(Qt::WA_DeleteOnClose);
    ui->listWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
    connect(FriendApplyLib::getInstance(),&FriendApplyLib::s_haveNewApply,this,&FriendApplyWidget::appendFriendApply);
    connect(FriendApplyLib::getInstance(),&FriendApplyLib::s_applyStatusChanged,this,&FriendApplyWidget::applyStatusChanged);
}

void FriendApplyWidget::setParent(QWidget *parent)
{
    this->parent=parent;
}

//追加好友申请
void FriendApplyWidget::appendFriendApply(const QString &friendoc, const QString &friendname)
{
    addFriendApply(friendoc,friendname,EnumLib::ApplyStatus::UNDERREVIEW);
}

FriendApplyWidget::~FriendApplyWidget()
{
    emit s_widgetclose();
    delete ui;
}

//添加好友申请
void FriendApplyWidget::addFriendApply(const QString &friendoc, const QString &friendname, const EnumLib::ApplyStatus status)
{
    qDebug()<<"load one apply  "<<status;
    QListWidgetItem* item=new QListWidgetItem("");
    ui->listWidget->addItem(item);
    FriendApplyBox* box=new FriendApplyBox;
    box->initBox(useroc,friendoc,friendname,status);
    ui->listWidget->setItemWidget(item,box);
    item->setSizeHint(box->getSizeHint());
    connect(box,&FriendApplyBox::s_appendContactWidget,this,[=](const QString& oc,const QString& name){
        static_cast<ContactWidget*>(parent)->appendContact(oc,name);
    });
    boxhash.insert(friendoc,box);
}

//从好友申请缓冲区加载申请信息到界面
void FriendApplyWidget::loadFriendApplyToUI()
{
    ui->listWidget->clear();
    QList<QPair<QPair<QString,QString>,uint8_t>> list=FriendApplyLib::getInstance()->getList();
    for(QPair<QPair<QString,QString>,uint8_t> i:list)
    {
        addFriendApply(i.first.first,i.first.second,static_cast<EnumLib::ApplyStatus>(i.second));
    }
}

void FriendApplyWidget::applyStatusChanged(const QString &friendoc, const EnumLib::ApplyStatus status)
{
    qDebug()<<friendoc<<status;
    boxhash[friendoc]->setStatus(status);
}
